#include <stdio.h>
#include <stdlib.h>

#define SIZE 10

struct Student_type
{ char name[10];
   int num;
   int age;
   char addr[15];
};

struct Student_type stud[SIZE];

// 编写load函数完成数据读取加载
void load()
{
    // 编程要点1：使用rb模式打开二进制文件
    FILE *fp = fopen("stu.list", "rb");
    if (fp == NULL)
    {
        printf("cannot open file\n");
        exit(1);
    }
    /* 方式1：使用循环读入 */
    int i = 0;
    for(i = 0; i < SIZE;  i++)
    {
        int ret = fread(&stud[i], sizeof(stud[i]), 1, fp);
        if (ret != 1)
        {
            printf("read file error\n");
            exit(2);
        }
    }
}

// 使用save函数将内存中的数据记录写入硬盘
void save()
{
    FILE *fp;
    // 编程要点1：使用二进制模式打开文件
    fp = fopen("stu.dat", "wb");
    if (fp == NULL)
    {
        printf("cannot open file\n");
        // 编程要点2：使用exit函数退出整个程序
        exit(1);
    }
    // 方式1：使用循环写入文件
    /*
    int i;
    for(i = 0; i < SIZE; i++)
    {
        if (fwrite(&stud[i], sizeof(stud[i]), 1, fp) != 1)
        {
            printf("file write error\n");
            exit(2);
        }
    }
    */
    // 方式2：直接使用fwrite直接写入整个数组
    int ret = fwrite(stud, sizeof(struct Student_type), SIZE, fp);
    if (ret != SIZE)
    {
        printf("file write error\n");
        exit(2);
    }
    // 编程要点3：记得及时关闭文件
    fclose(fp);
}

int main(int argc, char *argv[])
{
   load();
   save();
   return 0;
}